package br.sc.senai.model;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

public class VendaTableModel extends AbstractTableModel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static final int COL_NOMECLIENTE = 0;
	private static final int COL_NOMEFUNCIONARIO = 1;
	private static final int COL_DATA = 2;
	private static final int COL_PRODUTOS = 3;
	private static final int COL_VALORTOTAL = 4;

	private List<Venda> valores;

	// Esse é um construtor, que recebe a nossa lista de clientes
	public VendaTableModel() {
	}
	public VendaTableModel(List<Venda> valores) {
		this.valores = new ArrayList<Venda>(valores);
	}

	public int getRowCount() {
		// Quantas linhas tem sua tabela? Uma para cada item da lista.
		return valores.size();
	}

	public int getColumnCount() {
		// Quantas colunas tem a tabela? Nesse exemplo, só 2.
		return 5;
	}

	public String getColumnName(int column) {
		// Qual é o nome das nossas colunas?
		if (column == COL_NOMECLIENTE)
			return "Nome Cliente";
		if (column == COL_NOMEFUNCIONARIO)
			return "Nome Funcionário";
		if (column == COL_DATA)
			return "Data Venda";
		if (column == COL_PRODUTOS)
			return "Produtos";
		if (column == COL_VALORTOTAL)
			return "Valor Total";
		return ""; // Nunca deve ocorrer
	}

	public Object getValueAt(int row, int column) {
		// Precisamos retornar o valor da coluna column e da linha row.
		Venda venda = valores.get(row);
		if (column == COL_NOMECLIENTE) {
			return venda.getCliente().getNome();
		} else if (column == COL_NOMEFUNCIONARIO) {
			return venda.getFuncionario().getNome();
		} else if (column == COL_DATA) {
			return new SimpleDateFormat("dd/MM/yyyy").format(venda.getData());
		} else if (column == COL_PRODUTOS) {
			String itens = "";
			ArrayList<ItemVenda> ivenda = venda.getListaItensVenda();
			
			for (int i = 0; i < ivenda.size(); i++){
				itens += ivenda.get(i).getProduto().getMarca() + "           " + ivenda.get(i).getQuantidade() + "\n";
			}
			return itens;
		} else if (column == COL_VALORTOTAL) {
			ArrayList<ItemVenda> ivenda = venda.getListaItensVenda();
			Double valorTotal = 0.00;
			
			for (int i = 0; i < ivenda.size(); i++){
				valorTotal += (ivenda.get(i).getProduto().getPrecoUnitario() * ivenda.get(i).getQuantidade());
			}
			return valorTotal;
		}
		return ""; // Nunca deve ocorrer
	}

	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		Venda venda = valores.get(rowIndex);
		if (columnIndex == COL_NOMECLIENTE){
			venda.getCliente().setNome((aValue.toString()));
		} else if (columnIndex == COL_NOMEFUNCIONARIO){
				venda.getFuncionario().setNome(aValue.toString());
			
		}else if (columnIndex == COL_DATA){
			try {
				venda.setData(new SimpleDateFormat("dd/MM/yyyy").parse(aValue.toString()));
			} catch (ParseException e) {
				System.out.println("Parse Exception - VendaTableModel.setValueAt - COL_DATA");
			}
		}else if (columnIndex == COL_PRODUTOS){
			// fazer depois
		}else if (columnIndex == COL_VALORTOTAL){
			// não precisa
		}
	}

	public Class<?> getColumnClass(int columnIndex) {
		return String.class;
	}

	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return false;
	}
	
	public Venda get(int row) {
		return valores.get(row);
	}
}